package com.sxj.corejava.code06_数组;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2024年03月12日 19:25
 */
public class Test07_值传递与引用传递 {
    public static void main(String[] args) {
        // 值传递
        // 在栈内存中开辟了一块空间,空间名为i,值为1
        int i = 1;
        // 在栈内存中开辟了一块空间,空间名为i,值为栈中i的值
        int i2 = i;
        i2 = 2;
        System.out.println(i);
        // 此时的值在各自的栈内存中,互相没有影响
        System.out.println(i2);

        // 引用传递
        // 在堆中开辟了一串连续的空间,在栈空开辟了一块空间用于存放首地址的值
        // 只有出现了new关键字,才会在堆中进行开辟
        int[] arr = new int[]{1,2,3};

        // 在栈中开辟了一块空间,其值是arr中的值
        // 因此,实际上arr与arr2共用了同一串堆空间
        int[] arr2 = arr;
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));

        // 当修改arr2的元素的时候,本质上该的是堆内存中的数据
        // 由于arr与arr2共用同一串堆空间
        // 因此,此时的arr也随之改变
        arr2[0] = 10;
        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arr2));
    }
}
